01 Repetindo código...oh my!

Próxima Atividade
  • Sugerir melhoria
Carregando vídeo

Transcrição

Começando deste ponto? Você pode fazer o download completo do projeto do capítulo anterior e continuar seus estudos a partir deste capítulo.

Nossa aplicação consegue incluir e exibir negociações. Mas é bem comum uma aplicação informar o usuário sobre o sucesso das operações realizadas. Para isso, vamos criar o arquivo app/ts/views/MensagemView.ts. Ele terá uma estrutura praticamente idêntica ao arquivo de view que criamos antes, a diferença estará apenas no seu template, que recebe um parâmetro diferente e retorna um template específico:

class MensagemView {

    private _elemento: Element;

    constructor(seletor: string) {

        this._elemento = document.querySelector(seletor);
    }

    update(model: string) {

        this._elemento.innerHTML = this.template(model);
    }

    template(model: string): string {

        return `<p class="alert alert-info">${model}</p>`;
    }
}

Como todos os arquivo que criamos, vamos importar o resultado da sua compilação em app/index.html:

<!-- app/index.html -->
<!-- código anterior omitido -->
<script src="js/models/Negociacao.js"></script>
<script src="js/controllers/NegociacaoController.js"></script>
<script src="js/models/Negociacoes.js"></script>
<script src="js/views/NegociacoesView.js"></script>
<script src="js/views/MensagemView.js"></script>
<script src="js/app.js"></script>
<!-- código posterior omitido -->

Agora, vamos seguir um processo parecido como os que fizemos com a NegociacoesView, a diferença é que não chamaremos a função update() na inicialização, apenas no método adiciona():

class NegociacaoController {

    private _inputData: HTMLInputElement;
    private _inputQuantidade: HTMLInputElement;
    private _inputValor: HTMLInputElement;
    private _negociacoes = new Negociacoes();
    private _negociacoesView = new NegociacoesView('#negociacoesView');
    private _mensagemView = new MensagemView('#mensagemView');

    constructor() {
        this._inputData = <HTMLInputElement>document.querySelector('#data');
        this._inputQuantidade = <HTMLInputElement>document.querySelector('#quantidade');
        this._inputValor = <HTMLInputElement>document.querySelector('#valor');
        this._negociacoesView.update(this._negociacoes);
    }

    adiciona(event: Event) {

        event.preventDefault();

        const negociacao = new Negociacao(
            new Date(this._inputData.value.replace(/-/g, ',')), 
            parseInt(this._inputQuantidade.value),
            parseFloat(this._inputValor.value)
        );

        this._negociacoes.adiciona(negociacao);
        this._negociacoesView.update(this._negociacoes);
        this._mensagemView.update('Negociação adicionada com sucesso');
    }
}

A cada negociação adicionada, a mensagem é exibida. Tudo funciona, mais há algum "cheiro" de código que paira no ar. Assunto do próximo vídeo.

Tirar dúvida Próxima Atividade
ícone TypeScript parte 1: Evoluindo seu Javascript

TypeScript parte 1: Evoluindo seu Javascript

100%
Aula04 de 05

Herança, reaproveitamento de código

Atividades 1 de 10

  • 01 Repetindo código...oh my! 05min
  • 02 Herança 06min
  • 03 Utilizando herança
  • 04 Lidando com tipos genéricos 09min
  • 05 Dois tipos genéricos
  • 06 Para saber mais: preciso manter a propriedade protected?
  • 07 Classes abstratas 04min
  • 08 Boleto bancário
  • 09 Revisão 03min
  • 10 Consolidando seu conhecimento

Aulas

Outros Links

Fórum Trocar Curso
Gravatar de Marcos Katsumi Kay

Marcos Katsumi Kay 34.0k xp

Logo da Alura